package com.example.demo.demos.service;

import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class ExcelReader {

    /**
     * 读取Excel文件内容并转换为字符串列表
     * @param inputStream Excel文件路径流
     * @return 包含Excel内容的字符串列表，每个元素是一行数据的列表
     */
    public static List<List<String>> readExcel(InputStream inputStream) throws IOException {
        List<List<String>> data = new ArrayList<>();
//        Workbook workbook = WorkbookFactory.create(new FileInputStream(new File(filePath)))
        try (Workbook workbook = WorkbookFactory.create(inputStream)) {
            // 读取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);

            // 遍历所有行
            for (Row row : sheet) {
                List<String> rowData = new ArrayList<>();

                // 遍历行中的所有单元格
                for (Cell cell : row) {
                    // 根据单元格类型获取值并转换为字符串
                    String cellValue = getCellValue(cell);
                    rowData.add(cellValue);
                }

                data.add(rowData);
            }
        }

        return data;
    }

    /**
     * 根据单元格类型获取单元格值
     * @param cell 单元格对象
     * @return 单元格的字符串值
     */
    private static String getCellValue(Cell cell) {
        if (cell == null) {
            return "";
        }

        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    // 处理数字，避免科学计数法
                    return String.valueOf(cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }
}